// /**
//  *
//  *
//   执行顺序
//   属性装饰器（Property Decorators）和方法装饰器（Method Decorators）以及访问器装饰器（Accessor Decorators）按照它们在类中出现的顺序，从上到下依次执行。
//   参数装饰器（Parameter Decorators）在执行方法装饰器之前执行，按照参数的位置从右到左依次执行。
//   对于同一个参数的多个装饰器，也是从从右向左依次执行
//   类装饰器（Class Decorators）最后执行。
//  */

// function classDecorator() {
//   return function (constructor: Function) {
//     console.log('Class decorator');
//   };
// }

// function methodDecorator() {
//   return function (
//     target: any,
//     propertyKey: string,
//     descriptor: PropertyDescriptor,
//   ) {
//     console.log('Method decorator');
//   };
// }

// function accessorDecorator() {
//   return function (
//     target: any,
//     propertyKey: string,
//     descriptor: PropertyDescriptor,
//   ) {
//     console.log('Accessor decorator');
//   };
// }

// function propertyDecorator() {
//   return function (target: any, propertyKey: string) {
//     console.log('Property decorator');
//   };
// }

// function parameterDecorator() {
//   return function (target: any, propertyKey: string, parameterIndex: number) {
//     console.log('Parameter decorator');
//   };
// }

// @classDecorator()
// class Example {
//   @propertyDecorator()
//   prop: string;

//   @accessorDecorator()
//   get myProp() {
//     return this.prop;
//   }

//   @methodDecorator()
//   method(@parameterDecorator() param: any) {
//     console.log('Method execution');
//   }
// }
// //Property decorator
// // Accessor decorator
// // Parameter decorator
// // Method decorator
// // Class decorator
